\documentclass[titlepage]{article}
\usepackage[spanish]{babel}
\usepackage[pdftex]{hyperref}
\usepackage[pdftex]{graphicx}
\usepackage[utf8]{inputenc}

\bibliographystyle{plain}

\title{CC51D: Proyecto: Mail Snatcher \\Informe de avance}
\author{Felipe Ignacio Ca\~nas Sabat \and Pablo Ignacio Sep\'ulveda Rojas
\and Prof: Alejandro Hevia}

\begin{document}
\maketitle
\section{Introducci\'on}

El proyecto denominado MailSnatcher, consiste en el desarrollo de una
aplicación que se encarga de capturar y desplegar el correo electr\'onico
accedido de forma insegura, ya sea para enviar o recibir. En particular, los
esfuerzos se concentrar\'an en comunicaci\'on mediante redes inal\'ambricas
inseguras, dentro de las cuales los usuarios no utilicen servicios que cuenten
con encriptaci\'on de datos.

El prop\'osito de este desarrollo es el de mostrarle a los usuarios que no se
preocupan por utilizar canales seguros por los cuales transmitir datos
personales, lo f\'acil que es capturarlos. El objetivo del uso de esta
aplicación no es la de robarle los datos a los usuarios para humillarlos y/o
extorsionarlos, sino que para generar consciencia con respecto a la seguridad
de datos.

\section{Funcionalidades Esperadas}

El sistema, debe ser capaz de desplegar el correo accedido por alg\'un usuario
en la red, abarcando la mayor cantidad de maneras de leer correo que existen
en la actualidad. Para este proyecto, se considerar\'an las siguientes maneras
al momento de capturar mensajes,

\begin{itemize}
\item POP
\item SMTP
\item IMAP
\item HTTP (Hotmail y GMail)
\end{itemize} 

El orden original se decidi\'o por la dificultad de comprender cada protocolo.
Se est\'a considerando intentar desarrollar la funcionalidad de leer mensajes
recibidos o enviados a los servidores de Hotmail y GMail mediante HTTP antes
que SMTP e IMAP, pues son m\'as usados, y generar'ian un mayor impacto, lo
cual está más cercano a los objetivos principales del proyecto.

\section{Dise\~no Preliminar}

Se pretende usar un dise\~no orientado a objetos para la aplicación.

El primer paso de captura de paquetes consiste en controlar todo lo que fluye
por la red escogida. Para capturar bytes en bruto desde la red se utiliza la
biblioteca \textsf{pcap}, una biblioteca dise\~nada para la captura de
paquetes (como indica su nombre, una abreviaci\'on de \emph{packet capture}).

El objeto que se encarga de interactuar con \textsf{pcap} se llama
\textsf{Capturador}, y su funci\'on es la de  obtener los paquetes enviados.
Inmediatamente posterior a esto se procede a filtrar los paquetes para
solamente dejar pasar a los que transporten datos de los protocolos deseados.
Este filtro se planea hacer en base al puerto TCP utilizado para la conexión
(as\'i 110 ser\'a POP, 80 ser\'a HTML, etc.).

Luego se crea un objeto \textsf{Mensaje}, que contiene la direcci\'on IP y el
puerto TCP de tanto el emisor como el receptor del mensaje, con los cuales se
puede identificar la conversaci\'on. Este objeto se pretende que sea
abstracto, y que sus clases heredadas implementen protocolos particulares,
para as\'i formar las clases tales como \textsf{MensajeHTTP}.

\section{Trabajo realizado}

Hasta ahora, se han estado investigando los protocolos que se tratar\'an, y la
biblioteca que se usar\'a. Se ha logrado desarrollar peque\~nos m\'etodos de
prueba, que funcionan como base para el trabajo que seguir\'a durante el resto
del semestre.

\subsection{Investigaci\'on}

Se probaron las bibliotecas \textsf{jpcap} y \textsf{jnetpcap} para hacer el
desarrollo en Java, \'estas hacen uso de \textsf{pcap} mediante JNI.
Lamentablemente, \'estas no funcionan en arquitecturas de 64 bits, lo cual
dificulta el desarrollo, ya que la programaci\'on se har\'a en equipos de
estas especificaciones. Por esta raz\'on, se opt\'o por usar directamente las
bibliotecas de \textsf{pcap}, programando en C++.

Adicionalmente se ha investigado el protocolo POP, y se ha logrado identificar
la estructura b\'asica de las sesiones de este protocolo. Tambi\'en adem\'as
se ha investigado  el protocolo HTTP para dimensionar las dificultades
involucradas. En particular, se ha intentado analizar el esquema de la
comunicaci\'on usada por los servidores de correo por HTTP que se desean
considerar. Adem\'as se revisaron los protocolos Ethernet, IP y TCP, para
poder obtener la informaci\'on relevante de cada paquete capturado.

\subsection{Desarrollo}

Hasta ahora, se ha desarrollado gran parte del capturador, se prob\'o
capturando paquetes POP y se ha logrado hacer funcionar este aspecto de la
funcionalidad. Los m\'etodos de prueba elaborados son capaces de desplegar la
direcci\'on IP, puerto TCP (tanto del enviador como del receptor) y el
contenido del mensaje (el comando o la respuesta).

A continuaci\'on un ejemplo de captura de una sesi\'on POP,

\begin{verbatim}
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
src=c0a8010f dst=c0a8010a
src=110 dst=50010
src=6e dst=c35a
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
src=c0a8010f dst=c0a8010a
src=110 dst=50010
src=6e dst=c35a

+OK Dovecot ready.
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
user acanas
src=c0a8010f dst=c0a8010a
src=110 dst=50010
src=6e dst=c35a
src=c0a8010f dst=c0a8010a
src=110 dst=50010
src=6e dst=c35a

+OK
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
pass 1234
src=c0a8010f dst=c0a8010a
src=110 dst=50010
src=6e dst=c35a

+OK Logged in.
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
list
src=c0a8010f dst=c0a8010a
src=110 dst=50010
src=6e dst=c35a

+OK 2 messages:
1 861
2 1057
.
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
retr 1
src=c0a8010f dst=c0a8010a
src=110 dst=50010
src=6e dst=c35a

+OK 861 octets
Return-path: <fcanas@Quasimodo.casa>
Envelope-to: acanas@Quasimodo.casa
Delivery-date: Mon, 12 Jan 2009 00:43:25 -0300
Received: from fcanas by localhost with local (Exim 4.63)
(envelope-from <fcanas@Quasimodo.casa>)
id 1LMDi1-0004z8-DZ
for acanas@Quasimodo.casa; Mon, 12 Jan 2009 00:43:25 -0300
Date: Mon, 12 Jan 2009 00:43:25 -0300
To: Alberto Ignacio Canas Sabat <acanas@Quasimodo.casa>
Subject: Hola
Message-ID: <20090112034325.GA19153@Quasimodo.casa>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.5.13 (2006-08-11)
From: Felipe Ignacio Canas Sabat <fcanas@Quasimodo.casa>
X-SA-Exim-Connect-IP: <locally generated>
X-SA-Exim-Mail-From: fcanas@Quasimodo.casa
X-SA-Exim-Scanned: No (on localhost); SAEximRunCond expanded to false

Bienvenido.

Solo de prueba.

-Felipe
.
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
quit
src=c0a8010f dst=c0a8010a
src=110 dst=50010
src=6e dst=c35a

+OK Logging out.
src=c0a8010a dst=c0a8010f
src=50010 dst=110
src=c35a dst=6e
src=c0a8010f dst=c0a8010a
src=110 dst=50010
src=6e dst=c35a
\end{verbatim}

Hay algunos paquetes que no tienen informaci\'on de capas superiores, sino que
son mensajes de control (por ejemplo, los ACK del protocolo TCP). \'Estos
ser\'an descartados por el objeto \textsf{Mensaje}.

\section{Trabajo Restante}

Lo siguiente ser\'a crear el objeto \textsf{Mensaje} y la estructura que
organizar\'a el tr'afico en conversaciones. Luego se har\'a el
\textsf{MensajePOP}, para mostrar la informaci\'on relevante.

\end{document}
